# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import fields, models, api

import logging
_logger = logging.getLogger(__name__)



class IotGateway(models.Model):
    _name = "iot.gateway"
    _inherit = ['iot.mqtt.interface']
    _description = 'IotGateway'
    _order = "name"

    user_id = fields.Many2one('res.users', 'User', 
        default=lambda self: self.env.uid, index=True)

    partner_id = fields.Many2one('res.partner', 'Partner', 
        related='user_id.partner_id', store=True, index=True)

    company_id = fields.Many2one('res.company', 'Company', 
        default=lambda self: self.env.company, index=True)

    project_id = fields.Many2one('iot.project', 'Project', index=True)
    device_ids = fields.One2many('iot.device', 'gateway_id', string='Devices')
    sensor_ids = fields.One2many('iot.sensor', 'gateway_id', string='Sensors')

    name = fields.Char(index=True)
    code = fields.Char(index=True)
    router_code = fields.Char(string='Router Code', related='code')

    latitude = fields.Float(string='Latitude', digits=(16, 5))
    longitude = fields.Float(string='Longitude', digits=(16, 5))

    _sql_constraints = [
        ('unique_code', 'UNIQUE (code)',  'Gateway code is unique!')
    ]


    def action_put_config(self, value={}):
        self.ensure_one()

        values = {
            'name': self.name,
            'latitude': self.latitude,
            'longitude':self.longitude,
            'router_code': self.router_code,
            'sensor_ids':[]
        }

        self.publish( 'put', values= values, userdata={'function': 'config'} )

    def action_get_config(self):
        self.ensure_one()
        self.publish( 'get', userdata={'function': 'config'} )

    @api.model
    def on_message_get_ack(self, code, userdata=None, result=None, *args, **kwargs):
        print('on_message_get_ack gateway: ', code, userdata, result, args, kwargs)
        if userdata.get( 'function' ) == 'config':
            print('on_message_get_ack : config, router', result )

    @api.model
    def on_message_put_ack(self, code, userdata=None, result=None, *args, **kwargs):
        print('on_message_put_ack gateway: ', code, userdata, result, args, kwargs)
        if userdata.get( 'function' ) == 'config':
            print('on_message_put_ack : config, router', result and 'ok' or 'error' )


    # @api.model
    # @api.returns('self', lambda value: value.id)
    # def find_or_create(self, values):
    #     print('find_or_create,values: ', values )
    #     code = values['code']
    #     domain = [('code', '=', code)]
    #     obj = self.search(domain, limit=1)
    #     print('find_or_create, search: ', obj )
    #     if obj:
    #         return obj

    #     print('find_or_create, create: ' )
    #     return self.create(values)


    # def action_regack(self, msg=None):
    #     self.ensure_one()
    #     if not msg:
    #         msg = {'result': 'reg ok'}
    #     self.action_publish('ackput', 'register', msg)

    #     # if method == 'put' and func == 'register':
    #     #     obj = self.create({'code': code})
    #     #     obj.action_regack()


    # #     if method == 'put' and func == 'register':
    # #         self.action_regack( {'result': 'reg again'} )


    # #     if method == 'put' and func == 'measure':
    # #         print(method, func, self.code, kwargs)


